#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<string>
#include<list>
#include<algorithm>
using namespace std;


// void test_string12()
// {
// 	string file("string.cpp.zip");
// 	size_t pos = file.rfind('.');
// 	//string suffix = file.substr(pos, file.size() - pos);
// 	string suffix = file.substr(pos);

// 	cout << suffix << endl;

// 	string url("https://gitee.com/ailiangshilove/cpp-class/blob/master/%E8%AF%BE%E4%BB%B6%E4%BB%A3%E7%A0%81/C++%E8%AF%BE%E4%BB%B6V6/string%E7%9A%84%E6%8E%A5%E5%8F%A3%E6%B5%8B%E8%AF%95%E5%8F%8A%E4%BD%BF%E7%94%A8/TestString.cpp");
// 	size_t pos1 = url.find(':');
// 	string url1 = url.substr(0, pos1 - 0);
// 	cout << url1 << endl;

// 	size_t pos2 = url.find('/', pos1 + 3);
// 	string url2 = url.substr(pos1 + 3, pos2 - (pos1 + 3));
// 	cout << url2 << endl;

// 	string url3 = url.substr(pos2 + 1);
// 	cout << url3 << endl;
// }

// void test_string13()
// {

// 	// strtok
// 	std::string str("Please, replace the vowels in this sentence by asterisks.");
// 	std::size_t found = str.find_first_of("aeiou");
// 	while (found != std::string::npos)
// 	{
// 		str[found] = '*';
// 		found = str.find_first_of("aeiou", found + 1);
// 	}

// 	std::cout << str << '\n';
// }

// int main()
// {
// 	test_string13();

// 	return 0;
// }

// void SplitFilename(const std::string& str)
// {
// 	std::cout << "Splitting: " << str << '\n';
// 	std::size_t found = str.find_last_of("/\\");
// 	std::cout << " path: " << str.substr(0, found) << '\n';
// 	std::cout << " file: " << str.substr(found + 1) << '\n';
// }

// int main()
// {
// 	std::string str1("/usr/bin/man");
// 	std::string str2("c:\\windows\\winhelp.exe");

// 	cout << str2 << endl;

// 	SplitFilename(str1);
// 	SplitFilename(str2);

// 	return 0;
// }




// void test_string14()
// {
// 	string s1 = "hello";
// 	string s2 = "hello11";

// 	string ret1 = s1 + s2;
// 	cout << ret1 << endl;

// 	string ret2 = s1 + "xxxxx";
// 	cout << ret2 << endl;

// 	string ret3 = "xxxxx" + s1;
// 	cout << ret3 << endl;

// 	// 字典序比较
// 	cout << (s1 < s2) << endl;
// }

// int main()
// {
// 	test_string14();

// 	return 0;
// }




//int main()
//{
//	// 默认规定空格或者换行是多个值之间分割
//	string str;
//	//cin >> str;
//	getline(cin, str);
//
//	size_t pos = str.rfind(' ');
//	cout << str.size() - (pos + 1) << endl;
//
//	return 0;
//}

// int main()
// {
// 	// 默认规定空格或者换行是多个值之间分割
// 	string str;
// 	while (cin>>str)
// 	{
// 		cout << str << endl;
// 	}

// 	return 0;
// }



// int main()
// {
// 	// atoi  itoa

// 	// to_string
// 	int x = 0, y = 0;
// 	cin >> x >> y;
// 	string str = to_string(x + y);
// 	cout << str << endl;

// 	int z = stoi(str);

// 	return 0;
// }



// int main()
// {
// 	char buff1[] = "abcd";
// 	char buff2[] = "哈哈";

// 	cout << sizeof(buff1) << endl;
// 	cout << sizeof(buff2) << endl;

// 	cout << buff1 << endl;
// 	cout << buff2 << endl;

// 	return 0;
// }




#include "string.h"

namespace ltw
{
	void test_string1()
	{
		ltw::string s1("hello world");
		cout << s1.c_str() << endl;
        for (size_t i = 0; i < s1.size(); i++)
		{
			s1[i]++;
		}

		for (size_t i = 0; i < s1.size(); i++)
		{
			cout << s1[i] << " ";
		}
		cout << endl;
	}

    void test_string2()
	{
		// 封装：屏蔽了底层实现细节，提供了一种简单通用访问容器的方式
		// 支付宝和微信的支付
		// 网银
        ltw::string s1("hello world");
		string::iterator it1 = s1.begin();
		while (it1 != s1.end())
		{
			cout << *it1 << " ";
			++it1;
		}
		cout<<endl;

		for (auto e : s1)
		{
			cout << e << " ";
		}
		cout << endl;

		ltw::string s2;
		cout << s2.c_str() << endl;
	}
}

// template<class T>
// void func(const T& left, const T& right)
// {
// 	cout << "void func(const T& left, const T& right)" << endl;
// }

// template<>
// void func<int*>(int* const & left, int* const & right)
// {
// 	cout << "void func<int*>(int* const & left, int* const & right)" << endl;
// }

int main()
{
	ltw::test_string1();
	// int a = 0, b = 1;
	// func(a, b);
	// func(&a, &b);
	return 0;
}